草庐IT

c++ - RAII 和 C++ STL

全部标签

STL容器之queue

是什么循环队列,FIFO先进先出怎么用初始化//C11dequedeq{1,2,3,4,5};//拷贝构造,可以拷贝dequequeueque(deq);//100个5queueque2(100,5);//运算符重载que2=que;操作//队尾添加元素(这里只有一个出入口,就无所谓前后了也不用什么push_back())que.push(1);//弹出队首的元素que.pop();//在队尾构造并插入新元素que.emplace("2");查看状态类ps:stack和queue都是deque的特殊情况,他们不提供迭代器操作,自然地,不支持[]访问//返回bool类型,如果为空,返回1,否则返

c++ - 如何使用带有指针 vector 的 STL 算法

我有一个不属于容器的指针vector。如何在指针的目标上使用算法。我尝试使用boost的ptr_vector,但它会在超出范围时尝试删除指针。下面是一些需要工作的代码:vectormyValues;//...myValuesispopulatedboolconsistent=count(myValues.begin(),myValues.end(),myValues.front())==myValues.size();autov=consistent?myValues.front():accumulate(myValues.begin(),myValues.end(),0)/myVal

c++ - 如何使用带有指针 vector 的 STL 算法

我有一个不属于容器的指针vector。如何在指针的目标上使用算法。我尝试使用boost的ptr_vector,但它会在超出范围时尝试删除指针。下面是一些需要工作的代码:vectormyValues;//...myValuesispopulatedboolconsistent=count(myValues.begin(),myValues.end(),myValues.front())==myValues.size();autov=consistent?myValues.front():accumulate(myValues.begin(),myValues.end(),0)/myVal

c++ - STL:存储引用或值?

我一直对STL容器(vector、列表、map...)如何存储值感到有些困惑。他们是存储对我传入的值的引用,还是他们自己复制/复制构造+存储值?例如,inti;vectorvec;vec.push_back(i);//does&(vec[0])==&i;和classabc;abcinst;vectorvec;vec.push_back(inst);//does&(vec[0])==&inst;谢谢 最佳答案 STLContainers复制构造并存储您传入的值。如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针

c++ - STL:存储引用或值?

我一直对STL容器(vector、列表、map...)如何存储值感到有些困惑。他们是存储对我传入的值的引用,还是他们自己复制/复制构造+存储值?例如,inti;vectorvec;vec.push_back(i);//does&(vec[0])==&i;和classabc;abcinst;vectorvec;vec.push_back(inst);//does&(vec[0])==&inst;谢谢 最佳答案 STLContainers复制构造并存储您传入的值。如果您想将对象存储在容器中而不复制它们,我建议在容器中存储指向该对象的指针

c++ - STL 映射到自身?

我想创建一个std::map,其中包含一个std::vector迭代器,以实现一个简单的基于邻接列表的图形结构.但是,类型声明让我很困惑:您似乎需要整个映射类型定义来获取所述映射的迭代器类型,如下所示:map::iteratorMyMap_it;//whatshouldSomethingbe?map>MyMap_t;是否有某种部分映射迭代器类型我可以只使用键类型来获得,所以我可以声明完整映射? 最佳答案 您可以使用新类型的前向声明。classMapItContainers;typedefmap::iteratorMyMap_it;c

c++ - STL 映射到自身?

我想创建一个std::map,其中包含一个std::vector迭代器,以实现一个简单的基于邻接列表的图形结构.但是,类型声明让我很困惑:您似乎需要整个映射类型定义来获取所述映射的迭代器类型,如下所示:map::iteratorMyMap_it;//whatshouldSomethingbe?map>MyMap_t;是否有某种部分映射迭代器类型我可以只使用键类型来获得,所以我可以声明完整映射? 最佳答案 您可以使用新类型的前向声明。classMapItContainers;typedefmap::iteratorMyMap_it;c

c++ - 从函数返回 STL 容器

从函数返回STL容器的最佳方式(性能方面)是什么?返回的容器通常包含数千个项目。方法一:typedefstd::listItemContainer;ItemContainerCreateManyItems(){ItemContainerresult;//fillthe'result'...returnresult;}ItemContainera=CreateManyItems();方法二:voidCreateManyItems(ItemContainer&output){ItemContainerresult;//fillthe'result'...output.swap(result

c++ - 从函数返回 STL 容器

从函数返回STL容器的最佳方式(性能方面)是什么?返回的容器通常包含数千个项目。方法一:typedefstd::listItemContainer;ItemContainerCreateManyItems(){ItemContainerresult;//fillthe'result'...returnresult;}ItemContainera=CreateManyItems();方法二:voidCreateManyItems(ItemContainer&output){ItemContainerresult;//fillthe'result'...output.swap(result

C++ STL unordered_map 实现,引用有效性

对于std::map和std::tr1::unordered_map,我从标准中看到:Referencestoelementsintheunordered_mapcontainerremainvalidinallcases,evenafterarehash.他们是如何做到的(实现方面)?他们是否将所有条目维护为一种链表,然后哈希表只存储指向元素的指针? 最佳答案 是的,涉及到链表,但与您建议的方式不完全一样。2011年标准说(23.2.5第8段),“无序关联容器的元素被组织成桶。具有相同哈希码的键出现在同一个桶中。”在每个桶中,元素